Reactã®experimental_useFormStateã§ããã©ãŒãã³ã¹ãæé©åããç§èš£ãè§£ãæãããŸããé«åºŠãªãã¯ããã¯ãåŠã³ãReactã¢ããªã±ãŒã·ã§ã³ã®ãã©ãŒã ç¶æ åŠçé床ãåäžããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã匷åããŸãããã
React experimental_useFormStateããã©ãŒãã³ã¹æé©åïŒãã©ãŒã ç¶æ åŠçéåºŠãæ¥µãã
Reactã®experimental_useFormStateããã¯ã¯ãReactã³ã³ããŒãã³ãå
ã§ãã©ãŒã ã®ç¶æ
ãšãµãŒããŒã¢ã¯ã·ã§ã³ã管çããããã®åŒ·åãªæ¹æ³ãæäŸããŸããããããä»ã®è€éãªããŒã«ãšåæ§ã«ãããã©ãŒãã³ã¹ã®ããã«ããã¯ãé¿ããããã«ã¯ãå¹ççãªäœ¿ãæ¹ãçè§£ããããšãäžå¯æ¬ ã§ãããã®ã¬ã€ãã§ã¯ãexperimental_useFormStateã䜿çšããéã®ãã©ãŒã ç¶æ
åŠçéåºŠã®æé©åã«ã€ããŠãåºæ¬æŠå¿µããé«åºŠãªãã¯ããã¯ãŸã§ãç¶²çŸ
ããŠæ·±ãæãäžããŸããããããèœãšãç©Žãæ¢ããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«å¯ŸããŠã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã®å®è·µçãªæŠç¥ãæäŸããŸãã
experimental_useFormStateãçè§£ãã
æé©åã«ã€ããŠæãäžããåã«ãexperimental_useFormStateãäœãããã®ããç°¡åã«æ¯ãè¿ããŸãããããã®ããã¯ã䜿çšãããšããµãŒããŒã¢ã¯ã·ã§ã³ããã©ãŒã ã«ãã€ã³ãããçµæã®ç¶æ
ãã³ã³ããŒãã³ãå
ã§çŽæ¥ç®¡çã§ããŸããããã«ããããã©ãŒã ã®éä¿¡ããµãŒããŒãµã€ãããªããŒã·ã§ã³ããŠãŒã¶ãŒãžã®ãã£ãŒãããã¯è¡šç€ºã®ããã»ã¹ãç°¡çŽ åãããŸãããã®ããã¯ã¯ãçŸåšã®ãã©ãŒã ã®ç¶æ
ãšãã€ã³ããããã¢ã¯ã·ã§ã³é¢æ°ãè¿ããŸãã
åºæ¬çãªäŸã以äžã«ç€ºããŸãïŒ
import { useFormState } from 'react';
import { myServerAction } from './actions';
function MyForm() {
const [state, action] = useFormState(myServerAction, { message: '' });
return (
);
}
ãã®äŸã§ã¯ãmyServerActionã¯ãã©ãŒã ããŒã¿ãåŠçãããµãŒããŒé¢æ°ã§ããuseFormStateããã¯ã¯ããã©ãŒã éä¿¡æã«ãã®é¢æ°ãåŒã³åºãããã®çµæã§ã³ã³ããŒãã³ããæŽæ°ããåŠçãæ
åœããŸããçµæã¯state倿°ã«æ ŒçŽãããŸãã
ããããããã©ãŒãã³ã¹ã®èœãšã穎
experimental_useFormStateã¯ãã©ãŒã åŠçãç°¡çŽ åããŸãããããã€ãã®ããããééããããã©ãŒãã³ã¹åé¡ã«ã€ãªããå¯èœæ§ããããŸãããããã®èœãšã穎ãšããããåé¿ããæ¹æ³ãèŠãŠãããŸãããïŒ
1. äžèŠãªåã¬ã³ããªã³ã°
Reactã¢ããªã±ãŒã·ã§ã³ã§æãäžè¬çãªããã©ãŒãã³ã¹ã®ããã«ããã¯ã®äžã€ã¯ãäžèŠãªåã¬ã³ããªã³ã°ã§ããã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããããšãReactã¯ä»®æ³DOMã®èª¿æŽãè¡ãå¿
èŠããããããã¯ç¹ã«è€éãªã³ã³ããŒãã³ãã®å Žåãèšç®ã³ã¹ããé«ããªãå¯èœæ§ããããŸããexperimental_useFormStateãäžçšæã«äœ¿ããšãé »ç¹ãªåã¬ã³ããªã³ã°ãåŒãèµ·ããããããã©ãŒãã³ã¹ã«åœ±é¿ãäžããããšããããŸãã
åå ïŒ useFormStateããã¯ã¯ãããŒã¿ã倿ŽãããŠããªããŠãããµãŒããŒã¢ã¯ã·ã§ã³ãå®äºãããã³ã«æ°ããç¶æ
ãªããžã§ã¯ããè¿ããŸãããã®ãªããžã§ã¯ãã®åäžæ§ãå€ããããšã§ãã³ã³ããŒãã³ããšãã®åèŠçŽ ã®åã¬ã³ããªã³ã°ãããªã¬ãŒãããŸãã
解決çïŒ useMemoãuseCallbackã䜿çšããŠãããããç¶æ
ãã¢ã¯ã·ã§ã³é¢æ°ãã¡ã¢åããäžèŠãªåã¬ã³ããªã³ã°ãé²ããŸããããŒã¿ãå®éã«å€æŽãããå Žåã«ã®ã¿ç¶æ
ãæŽæ°ããããã«ããŸãã
äŸïŒ
import { useFormState } from 'react';
import { useCallback, useMemo } from 'react';
import { myServerAction } from './actions';
function MyForm() {
const initialState = useMemo(() => ({ message: '' }), []);
const [state, action] = useFormState(myServerAction, initialState);
//ã¡ãã»ãŒãžã倿ŽãããŠããªãå Žåãåã¬ã³ããªã³ã°ãé²ã
const memoizedState = useMemo(() => {
return state
}, [state?.message]);
const memoizedAction = useCallback((formData) => {
action(formData);
}, [action]);
return (
);
}
2. è€éãªç¶æ ã®æŽæ°
å€§èŠæš¡ãªããŸãã¯æ·±ããã¹ããããç¶æ ãªããžã§ã¯ãã®æŽæ°ã¯ã³ã¹ãããããããšããããŸããåæŽæ°ã¯åã¬ã³ããªã³ã°ãããªã¬ãŒããReactã¯å€ãç¶æ ãšæ°ããç¶æ ãæ¯èŒããŠå€æŽãç¹å®ããå¿ èŠããããŸããè€éãªç¶æ ã®æŽæ°ã¯ãã¢ããªã±ãŒã·ã§ã³ãå€§å¹ ã«é ãããå¯èœæ§ããããŸãã
åå ïŒ experimental_useFormStateã¯ããµãŒããŒã¢ã¯ã·ã§ã³ãè¿ããããšãç¶æ
ãªããžã§ã¯ãå
šäœãèªåçã«æŽæ°ããŸããç¶æ
ãªããžã§ã¯ãã倧ããããŸãã¯æ·±ããã¹ããããããŒã¿ãå«ãã§ããå Žåããããããã©ãŒãã³ã¹åé¡ã«ã€ãªããå¯èœæ§ããããŸãã
解決çïŒ ç¶æ ãªããžã§ã¯ãã¯ã§ããã ãã·ã³ãã«ã«ä¿ã¡ãŸããäžèŠãªããŒã¿ãç¶æ ã«ä¿åããã®ãé¿ããŠãã ããã倧ããªç¶æ ãããå Žåã¯ããããããå°ããã管çããããéšåã«åå²ããããšãæ€èšããŠãã ãããã€ãã¥ãŒã¿ããªãã£ïŒäžå€æ§ïŒã®ãããªãã¯ããã¯ã䜿çšããŠãç¶æ ã®äžéšãå¹ççã«æŽæ°ããŸãã
äŸïŒ ãã¹ãŠã®ãã©ãŒã ããŒã¿ãåäžã®ç¶æ
ãªããžã§ã¯ãã«ä¿åãã代ããã«ãåãã£ãŒã«ãã®å€ãuseStateã䜿çšããŠå¥ã
ã®ç¶æ
倿°ã«ä¿åããŸããããããããšã§ã倿Žããããã£ãŒã«ãã«é¢é£ããã³ã³ããŒãã³ãã®ã¿ãåã¬ã³ããªã³ã°ãããŸãã
3. é«ã³ã¹ããªãµãŒããŒã¢ã¯ã·ã§ã³
ãµãŒããŒã¢ã¯ã·ã§ã³ã®ããã©ãŒãã³ã¹ã¯ããã©ãŒã ã®ããã©ãŒãã³ã¹ã«çŽæ¥åœ±é¿ããŸãããµãŒããŒã¢ã¯ã·ã§ã³ãé ãããŸãã¯ãªãœãŒã¹ã倧éã«æ¶è²»ããå Žåãç¶æ ã®æŽæ°ãé ããã¢ããªã±ãŒã·ã§ã³ãé ãæããããããã«ãªããŸãã
åå ïŒ ãµãŒããŒã¢ã¯ã·ã§ã³å ã§ã®é ãããŒã¿ããŒã¹ã¯ãšãªãè€éãªèšç®ããŸãã¯éå¹çãªãããã¯ãŒã¯ãªã¯ãšã¹ãã
解決çïŒ å®è¡æéãæå°éã«æããããã«ãµãŒããŒã¢ã¯ã·ã§ã³ãæé©åããŸããå¹ççãªã¢ã«ãŽãªãºã ã䜿çšããããŒã¿ããŒã¹ã¯ãšãªãæé©åããé »ç¹ã«ã¢ã¯ã»ã¹ãããããŒã¿ããã£ãã·ã¥ããŸããé·æéå®è¡ãããã¿ã¹ã¯ãéåæã§åŠçããããã«ãããã¯ã°ã©ãŠã³ããžã§ãããã¥ãŒã®äœ¿çšãæ€èšããŠãã ããããµãŒããŒã¢ã¯ã·ã§ã³ãäºæãã倱æããã®ãé²ãã貧匱ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããã®ãé¿ããããã«ãå ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããŸãã
4. ã¡ã€ã³ã¹ã¬ããã®ããããã³ã°
JavaScriptã¯ã·ã³ã°ã«ã¹ã¬ããã§ããããã¹ãŠã®ã³ãŒããã¡ã€ã³ã¹ã¬ãããšåŒã°ããåäžã®ã¹ã¬ããã§å®è¡ãããããšãæå³ããŸããé·æéå®è¡ãããã¿ã¹ã¯ãã¡ã€ã³ã¹ã¬ããããããã¯ãããšããã©ãŠã¶ã¯å¿çããªããªãã貧匱ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸãã
åå ïŒ ãµãŒããŒã¢ã¯ã·ã§ã³ãã³ã³ããŒãã³ãã®æŽæ°ã«ããããå®è¡ã«æéããããåæçãªæäœã
解決çïŒ ã¡ã€ã³ã¹ã¬ããã®ããããã³ã°ãé¿ããããã«éåææäœã䜿çšããŸããéåæã¿ã¹ã¯ãåŠçããã«ã¯async/awaitãPromiseã䜿çšããŸããèšç®éçŽçãªã¿ã¹ã¯ãããã¯ã°ã©ãŠã³ãã¹ã¬ããã«ãªãããŒãããããã«ãWebã¯ãŒã«ãŒã®äœ¿çšãæ€èšããŠãã ãããä»®æ³åãããŒãžããŒã·ã§ã³ã®ãããªãã¯ããã¯ã䜿çšããŠãã¡ã€ã³ã¹ã¬ããããããã¯ããããšãªãå€§èŠæš¡ãªããŒã¿ã»ãããå¹ççã«ã¬ã³ããªã³ã°ããŸãã
5. éå°ãªãããã¯ãŒã¯ãªã¯ãšã¹ã
åãããã¯ãŒã¯ãªã¯ãšã¹ãã¯ã¢ããªã±ãŒã·ã§ã³ã«é å»¶ã远å ããŸããéå°ãªãããã¯ãŒã¯ãªã¯ãšã¹ãã¯ããã©ãŒã ã®éä¿¡ãšç¶æ ã®æŽæ°ãå€§å¹ ã«é ãããå¯èœæ§ããããŸãã
åå ïŒ ãã©ãŒã ã®ããªããŒã·ã§ã³ãããŒã¿ååŸã®ããã«è€æ°ã®ãããã¯ãŒã¯ãªã¯ãšã¹ããè¡ãããšããµãŒããŒã«å€§éã®ããŒã¿ãéä¿¡ããããšã
解決çïŒ ãããã¯ãŒã¯ãªã¯ãšã¹ãã®æ°ãæå°éã«æããŸããå¯èœãªéãè€æ°ã®ãªã¯ãšã¹ããåäžã®ãªã¯ãšã¹ãã«ãŸãšããŸããã³ãŒãåå²ãé å»¶èªã¿èŸŒã¿ã®ãããªãã¯ããã¯ã䜿çšããŠãå¿ èŠãªãªãœãŒã¹ã®ã¿ãããŒãããŸãããµãŒããŒã«éä¿¡ããåã«ããŒã¿ãå§çž®ããŸãã
é«åºŠãªæé©åãã¯ããã¯
ããããèœãšã穎ã«ã€ããŠèª¬æããã®ã§ã次ã«experimental_useFormStateã®ããã©ãŒãã³ã¹ãæé©åããããã®ããã€ãã®é«åºŠãªãã¯ããã¯ãæ¢ã£ãŠã¿ãŸãããïŒ
1. ãµãŒããŒãµã€ãããªããŒã·ã§ã³
ãã©ãŒã ã®ããªããŒã·ã§ã³ããµãŒããŒãµã€ãã§å®è¡ããããšã¯ãäžè¬çã«ã¯ã©ã€ã¢ã³ããµã€ãã®ããªããŒã·ã§ã³ãããå®å šã§ä¿¡é Œæ§ãé«ãã§ãããããããµãŒããŒãžã®ãããã¯ãŒã¯ãªã¯ãšã¹ããå¿ èŠãªãããé ããªãå¯èœæ§ããããŸãã
æé©åïŒ ã¯ã©ã€ã¢ã³ããµã€ããšãµãŒããŒãµã€ãã®ããªããŒã·ã§ã³ãçµã¿åãããŠå®è£ ããŸããå¿ é ãã£ãŒã«ããããŒã¿åœ¢åŒã®ãããªåºæ¬çãªãã§ãã¯ã«ã¯ã¯ã©ã€ã¢ã³ããµã€ãã®ããªããŒã·ã§ã³ã䜿çšããŸããããè€éãªããªããŒã·ã§ã³ã¯ãµãŒããŒãµã€ãã§å®è¡ããŸããããã«ãããäžèŠãªãããã¯ãŒã¯ãªã¯ãšã¹ãã®æ°ãæžãããŠãŒã¶ãŒãžã®ãã£ãŒãããã¯ã«ãŒããéããªããŸãã
äŸïŒ
// ã¯ã©ã€ã¢ã³ããµã€ãã®ããªããŒã·ã§ã³
function validateForm(data) {
if (!data.name) {
return 'Name is required';
}
return null;
}
// ãµãŒããŒãµã€ãã®ã¢ã¯ã·ã§ã³
async function myServerAction(prevState, formData) {
const data = Object.fromEntries(formData);
// ã¯ã©ã€ã¢ã³ããµã€ãã®ããªããŒã·ã§ã³
const clientError = validateForm(data);
if(clientError){
return {message: clientError}
}
// ãµãŒããŒãµã€ãã®ããªããŒã·ã§ã³
if (data.name.length < 3) {
return { message: 'Name must be at least 3 characters' };
}
// ãã©ãŒã ããŒã¿ãåŠç
return { message: 'Form submitted successfully!' };
}
2. ãªããã£ãã¹ãã£ãã¯æŽæ°
ãªããã£ãã¹ãã£ãã¯æŽæ°ã¯ãã¢ããªã±ãŒã·ã§ã³ã®äœæããã©ãŒãã³ã¹ãåäžãããæ¹æ³ã§ãããªããã£ãã¹ãã£ãã¯æŽæ°ã§ã¯ããŠãŒã¶ãŒããã©ãŒã ãéä¿¡ããçŽåŸã«ããµãŒããŒã®å¿çãåŸ ããã«UIãæŽæ°ããŸãããµãŒããŒã¢ã¯ã·ã§ã³ã倱æããå Žåã¯ãUIã以åã®ç¶æ ã«æ»ãããšãã§ããŸãã
æé©åïŒ ãªããã£ãã¹ãã£ãã¯æŽæ°ãå®è£ ããŠãããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŸããããã«ããããµãŒããŒã¢ã¯ã·ã§ã³ã®å®äºã«æéãããã£ãŠããã¢ããªã±ãŒã·ã§ã³ãããéãæããããããã«ãªããŸãã
äŸïŒ
import { useFormState, useState } from 'react';
import { myServerAction } from './actions';
function MyForm() {
const [optimisticMessage, setOptimisticMessage] = useState('');
const [state, action] = useFormState(async (prevState, formData) => {
setOptimisticMessage('Submitting...'); // ãªããã£ãã¹ãã£ãã¯æŽæ°
const result = await myServerAction(prevState, formData);
if (!result.success) {
setOptimisticMessage(''); // ãšã©ãŒæã«å
ã«æ»ã
}
return result;
}, { message: '' });
return (
);
}
3. ãããŠã³ã¹ãšã¹ããããªã³ã°
ãããŠã³ã¹ãšã¹ããããªã³ã°ã¯ã颿°ãå®è¡ãããé »åºŠãå¶éããããã®ãã¯ããã¯ã§ãããããã¯ããã©ãŒã ã®ããªããŒã·ã§ã³ããŠãŒã¶ãŒå ¥åã«ãã£ãŠããªã¬ãŒãããä»ã®ã¿ã¹ã¯ãæé©åããã®ã«åœ¹ç«ã¡ãŸãã
æé©åïŒ ãããŠã³ã¹ãã¹ããããªã³ã°ã䜿çšããŠããµãŒããŒã¢ã¯ã·ã§ã³ãåŒã³åºãããåæ°ãæžãããŸããããã«ãããããã©ãŒãã³ã¹ãåäžããäžèŠãªãããã¯ãŒã¯ãªã¯ãšã¹ããé²ãããšãã§ããŸãã
äŸïŒ
import { useFormState } from 'react';
import { debounce } from 'lodash'; // lodashãå¿
èŠã§ã
import { myServerAction } from './actions';
function MyForm() {
const [state, action] = useFormState(myServerAction, { message: '' });
const debouncedAction = debounce(action, 300); // 300msã§ãããŠã³ã¹
return (
);
}
4. ã³ãŒãåå²ãšé å»¶èªã¿èŸŒã¿
ã³ãŒãåå²ã¯ãã¢ããªã±ãŒã·ã§ã³ããªã³ããã³ãã§èªã¿èŸŒããå°ããªãã³ãã«ã«åå²ããããã»ã¹ã§ããé å»¶èªã¿èŸŒã¿ã¯ããªãœãŒã¹ãå¿ èŠã«ãªã£ããšãã«ã®ã¿èªã¿èŸŒããã¯ããã¯ã§ãã
æé©åïŒ ã³ãŒãåå²ãšé å»¶èªã¿èŸŒã¿ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®åæèªã¿èŸŒã¿æéãççž®ããŸããããã«ãããå šäœçãªããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸãã
5. ã¡ã¢åãã¯ããã¯
å ã»ã©ç°¡åã«è§ŠããŸããããããã«è©³ãã説æãã䟡å€ããããŸããã¡ã¢åã¯ãé«ã³ã¹ããªé¢æ°åŒã³åºãã®çµæããã£ãã·ã¥ããåãå ¥åãå床çºçãããšãã«ãã£ãã·ã¥ãããçµæãè¿ããšãã匷åãªæé©åãã¯ããã¯ã§ãã
æé©åïŒ useMemoãšuseCallbackã䜿çšããŠãã³ã³ããŒãã³ãå
ã§äœ¿çšãããå€ã颿°ãã¡ã¢åããŸããããã«ãããäžèŠãªåã¬ã³ããªã³ã°ãé²ããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
äŸïŒ
import { useFormState, useMemo, useCallback } from 'react';
import { myServerAction } from './actions';
function MyForm() {
const [state, action] = useFormState(myServerAction, { message: '' });
// ã¢ã¯ã·ã§ã³é¢æ°ãã¡ã¢å
const memoizedAction = useCallback(action, [action]);
// ç¶æ
å€ãã¡ã¢å
const memoizedState = useMemo(() => state, [state]);
return (
);
}
ããŸããŸãªå°åã§ã®å®è·µäŸ
ãããã®æŠå¿µãã°ããŒãã«ãªæèã§èª¬æããããã«ãããã€ãã®äŸãèããŠã¿ãŸãããïŒ
- æ¥æ¬ã®Eã³ããŒã¹ãã©ãŒã ïŒ æ¥æ¬ã®Eã³ããŒã¹ãµã€ãã§ã¯ããã§ãã¯ã¢ãŠããã©ãŒã ã«
experimental_useFormStateã䜿çšããŠããŸããããã©ãŒãã³ã¹ãæé©åãããããå šåœã®éµäŸ¿çªå·ããŒã¿ããŒã¹ã«å¯Ÿããäœææ€èšŒã«ãµãŒããŒãµã€ãããªããŒã·ã§ã³ãå©çšããŠããŸãããŸãããŠãŒã¶ãŒã泚æãéä¿¡ããåŸãæ¯æããåŠçãããåã§ãããã«æ³šæç¢ºèªããŒãžã衚瀺ããããã«ããªããã£ãã¹ãã£ãã¯æŽæ°ãå®è£ ããŠããŸãã - ãã€ãã®éè¡ã¢ããªã±ãŒã·ã§ã³ïŒ ãã€ãã®éè¡ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãè³éç§»åãã©ãŒã ã«
experimental_useFormStateã䜿çšããŠããŸããã»ãã¥ãªãã£ãšããã©ãŒãã³ã¹ã確ä¿ãããããã¯ã©ã€ã¢ã³ããµã€ããšãµãŒããŒãµã€ãã®ããªããŒã·ã§ã³ãçµã¿åãããŠããŸããã¯ã©ã€ã¢ã³ããµã€ãã§ã¯åºæ¬çãªå ¥åãšã©ãŒããã§ãã¯ãããµãŒããŒãµã€ãã§ã¯å£åº§æ®é«ãååŒé床é¡ã®ãããªããè€éãªãã§ãã¯ãå®è¡ããŸãããŸãããŠãŒã¶ãŒãééé¡ãå ¥åããéã®éå°ãªAPIåŒã³åºããé²ãããã«ããããŠã³ã¹ã䜿çšããŠããŸãã - ãã©ãžã«ã®ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒ ãã©ãžã«ã®ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã§ã¯ãæçš¿äœæãã©ãŒã ã«
experimental_useFormStateã䜿çšããŠããŸãã倧ããªã¡ãã£ã¢ã®ã¢ããããŒããåŠçããããã«ãããã¯ã°ã©ãŠã³ããžã§ãã䜿çšããŠç»åãåç»ãéåæã§åŠçããŸãããŸããæçš¿äœæãã©ãŒã ã«å¿ èŠãªJavaScriptã³ãŒãã®ã¿ãèªã¿èŸŒãããã«ã³ãŒãåå²ã䜿çšããã¢ããªã±ãŒã·ã§ã³ã®åæèªã¿èŸŒã¿æéãççž®ããŠããŸãã - ã€ã³ãã®æ¿åºãµãŒãã¹ããŒã¿ã«ïŒ ã€ã³ãã®æ¿åºãµãŒãã¹ããŒã¿ã«ã§ã¯ãç³è«ãã©ãŒã ã«
experimental_useFormStateã䜿çšããŠããŸãã垯åå¹ ãéãããŠããå°åã§ã®ããã©ãŒãã³ã¹ãæé©åããããããµãŒããŒã«ããŒã¿ãéä¿¡ããåã«ããŒã¿ãå§çž®ããŠããŸãããŸãããŠãŒã¶ãŒã®éžæã«åºã¥ããŠå¿ èŠãªãã©ãŒã ãã£ãŒã«ãã®ã¿ãèªã¿èŸŒãããã«ãé å»¶èªã¿èŸŒã¿ã䜿çšããŠããŸãã
ããã©ãŒãã³ã¹ã®ç£èŠãšãããã°
ããã©ãŒãã³ã¹ã®æé©åã¯å埩çãªããã»ã¹ã§ããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç£èŠããæ¹åã®äœå°ãããé åãç¹å®ããããšãäžå¯æ¬ ã§ãããã©ãŠã¶ã®éçºè ããŒã«ãããã©ãŒãã³ã¹ç£èŠããŒã«ã䜿çšããŠãã¬ã³ããªã³ã°æéããããã¯ãŒã¯é å»¶ãã¡ã¢ãªäœ¿çšéãªã©ã®äž»èŠãªã¡ããªã¯ã¹ã远跡ããŸãã
圹ç«ã€ããŒã«ãããã€ã玹ä»ããŸãïŒ
- React ProfilerïŒ React Developer Toolsã«çµã¿èŸŒãŸããããŒã«ã§ãReactã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ããããã¡ã€ãªã³ã°ã§ããŸãã
- Chrome DevToolsã®Performanceã¿ãïŒ CPU䜿çšçãã¡ã¢ãªå²ãåœãŠããããã¯ãŒã¯ã¢ã¯ãã£ããã£ãªã©ãWebã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåæããããã®åŒ·åãªããŒã«ã§ãã
- LighthouseïŒ Webã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãã¢ã¯ã»ã·ããªãã£ãSEOãç£æ»ããããã®èªååããŒã«ã§ãã
- WebPageTestïŒ äžçäžã®ããŸããŸãªå ŽæããWebã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããã¹ãããããã®ç¡æããŒã«ã§ãã
ãã¹ããã©ã¯ãã£ã¹ã®ãŸãšã
ãŸãšããšããŠãexperimental_useFormStateã®ããã©ãŒãã³ã¹ãæé©åããããã®ãã¹ããã©ã¯ãã£ã¹ã以äžã«ç€ºããŸãïŒ
- åã¬ã³ããªã³ã°ã®æå°åïŒ
useMemoãšuseCallbackã䜿çšããŠäžèŠãªåã¬ã³ããªã³ã°ãé²ããŸãã - ç¶æ æŽæ°ã®ç°¡çŽ åïŒ ç¶æ ãªããžã§ã¯ããã§ããã ãã·ã³ãã«ã«ä¿ã¡ãŸãã
- ãµãŒããŒã¢ã¯ã·ã§ã³ã®æé©åïŒ å¹ççãªã¢ã«ãŽãªãºã ã䜿çšããããŒã¿ããŒã¹ã¯ãšãªãæé©åããé »ç¹ã«ã¢ã¯ã»ã¹ãããããŒã¿ããã£ãã·ã¥ããŸãã
- ã¡ã€ã³ã¹ã¬ããã®ããããã³ã°ãåé¿ïŒ éåææäœãWebã¯ãŒã«ãŒã䜿çšããŠã¡ã€ã³ã¹ã¬ããã®ããããã³ã°ãåé¿ããŸãã
- ãããã¯ãŒã¯ãªã¯ãšã¹ãã®åæžïŒ ãããã¯ãŒã¯ãªã¯ãšã¹ãã®æ°ãæå°éã«æãããµãŒããŒã«éä¿¡ããåã«ããŒã¿ãå§çž®ããŸãã
- ãµãŒããŒãµã€ãããªããŒã·ã§ã³ã®äœ¿çšïŒ ã¯ã©ã€ã¢ã³ããµã€ããšãµãŒããŒãµã€ãã®ããªããŒã·ã§ã³ãçµã¿åãããŠå®è£ ããŸãã
- ãªããã£ãã¹ãã£ãã¯æŽæ°ã®å®è£ ïŒ ãªããã£ãã¹ãã£ãã¯æŽæ°ã§ããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
- ãããŠã³ã¹ãšã¹ããããªã³ã°ã®äœ¿çšïŒ ãµãŒããŒã¢ã¯ã·ã§ã³ãåŒã³åºãããåæ°ãæžãããŸãã
- ã³ãŒãåå²ãšé å»¶èªã¿èŸŒã¿ã®äœ¿çšïŒ ã¢ããªã±ãŒã·ã§ã³ã®åæèªã¿èŸŒã¿æéãççž®ããŸãã
- ããã©ãŒãã³ã¹ã®ç£èŠïŒ ãã©ãŠã¶ã®éçºè ããŒã«ãããã©ãŒãã³ã¹ç£èŠããŒã«ã䜿çšããŠäž»èŠãªã¡ããªã¯ã¹ã远跡ããŸãã
çµè«
experimental_useFormStateã§ã®ããã©ãŒãã³ã¹æé©åã«ã¯ãReactã®ã¬ã³ããªã³ã°åäœãšããã©ãŒã ã®ç¶æ
ããµãŒããŒã¢ã¯ã·ã§ã³ãæ±ãéã«çºçãããæœåšçãªããã«ããã¯ã«ã€ããŠã®æ·±ãçè§£ãå¿
èŠã§ãããã®ã¬ã€ãã§æŠèª¬ãããã¯ããã¯ã«åŸãããšã§ããŠãŒã¶ãŒã®å Žæãããã€ã¹ã«é¢ããããReactã¢ããªã±ãŒã·ã§ã³ãã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããããã«ããããšãã§ããŸããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããå¿
èŠã«å¿ããŠæé©åæŠç¥ãé©å¿ãããããšãå¿ããªãã§ãã ãããæ
éãªèšç»ãšå®è£
ã«ãããexperimental_useFormStateã®åãæŽ»çšããŠã髿§èœã§ã°ããŒãã«ã«ã¢ã¯ã»ã¹å¯èœãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããéçºãµã€ã¯ã«ã®åææ®µéããããã©ãŒãã³ã¹ãèæ
®ããã°ãåŸã§èªåèªèº«ã«æè¬ããããšã«ãªãã§ãããã